

// 箭头函数的写法
var hello = function() {
    console.log("hello, world!");
}

var arrow_hello = () => console.log("hello wolrd!");

console.log((typeof hello) === (typeof arrow_hello));

var greeting = function(name) {
    var str = `hello ${name}`;
    console.log(str);
}

// 建议参数写上括号，语句用{}包起
// 如当遇到多参数时，事件的回调函数
var arrow_greeting = (name) => {
    var str = `hello ${name}`;
    console.log(str);
}

// 返回对象时用小括号包起
var getObject = obj => {
    //  ...
    return ({
        name: 'Jack',
        age: 33
    })
}


greeting('gavin');

// 箭头函数的
// 当嵌套内层函数，需要访问外部属性时
var circle = {
    radius: 10,
    outer() {
        // 内层函数
        var inner = function() {
            // 内层函数继承不到外层函数的this值
            console.log(2 * this.radius); // NaN
            console.log(this === window); // true
        };
        inner();
    }
};

circle.outer();

var fix = {
    radius: 10,
    outer() {
        // 不得不用临时变量self将外层函数的this搬运到内层函数inner
        var self = this;
        var inner = function() {
            console.log(2 * self.radius); // 20
        }
        inner();
    }
};

fix.outer();

// 箭头函数版

var arrow = {

    radius: 10,
    outer() {
        var inner = () => {
            console.log(3 * this.radius);
        };
        inner();
    }
};

arrow.outer();